package com.ruoyi.generator.domain;

import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.utils.StringUtils;
import javax.validation.constraints.NotBlank;

/**
 * 代码生成业务字段表 gen_table_column
 *
 * @author ruoyi
 */
public class GenTableColumn extends BaseEntity {
  private static final long serialVersionUID = 1L;

  /** 编号 */
  private Long columnId;

  /** 归属表编号 */
  private Long tableId;

  /** 列名称 */
  private String columnName;

  /** 列描述 */
  private String columnComment;

  /** 列类型 */
  private String columnType;

  /** JAVA类型 */
  private String javaType;

  /** JAVA字段名 */
  @NotBlank(message = "Java属性不能为空")
  private String javaField;

  /** 是否主键（1是） */
  private String isPk;

  /** 是否自增（1是） */
  private String isIncrement;

  /** 是否必填（1是） */
  private String isRequired;

  /** 是否为插入字段（1是） */
  private String isInsert;

  /** 是否编辑字段（1是） */
  private String isEdit;

  /** 是否列表字段（1是） */
  private String isList;

  /** 是否查询字段（1是） */
  private String isQuery;

  /** 查询方式（EQ等于、NE不等于、GT大于、LT小于、LIKE模糊、BETWEEN范围） */
  private String queryType;

  /**
   * 显示类型（input文本框、textarea文本域、select下拉框、checkbox复选框、radio单选框、datetime日期控件、image图片上传控件、upload文件上传控件、editor富文本控件）
   */
  private String htmlType;

  /** 字典类型 */
  private String dictType;

  /** 排序 */
  private Integer sort;

  public void setColumnId(Long columnId) {
    this.columnId = columnId;
  }

  public Long getColumnId() {
    return columnId;
  }

  public void setTableId(Long tableId) {
    this.tableId = tableId;
  }

  public Long getTableId() {
    return tableId;
  }

  public void setColumnName(String columnName) {
    this.columnName = columnName;
  }

  public String getColumnName() {
    return columnName;
  }

  public void setColumnComment(String columnComment) {
    this.columnComment = columnComment;
  }

  public String getColumnComment() {
    return columnComment;
  }

  public void setColumnType(String columnType) {
    this.columnType = columnType;
  }

  public String getColumnType() {
    return columnType;
  }

  public void setJavaType(String javaType) {
    this.javaType = javaType;
  }

  public String getJavaType() {
    return javaType;
  }

  public void setJavaField(String javaField) {
    this.javaField = javaField;
  }

  public String getJavaField() {
    return javaField;
  }

  public String getCapJavaField() {
    return StringUtils.capitalize(javaField);
  }

  public void setIsPk(String isPk) {
    this.isPk = isPk;
  }

  public String getIsPk() {
    return isPk;
  }

  public boolean isPk() {
    return isPk(this.isPk);
  }

  public boolean isPk(String isPk) {
    return isPk != null && StringUtils.equals("1", isPk);
  }

  public String getIsIncrement() {
    return isIncrement;
  }

  public void setIsIncrement(String isIncrement) {
    this.isIncrement = isIncrement;
  }

  public boolean isIncrement() {
    return isIncrement(this.isIncrement);
  }

  public boolean isIncrement(String isIncrement) {
    return isIncrement != null && StringUtils.equals("1", isIncrement);
  }

  public void setIsRequired(String isRequired) {
    this.isRequired = isRequired;
  }

  public String getIsRequired() {
    return isRequired;
  }

  public boolean isRequired() {
    return isRequired(this.isRequired);
  }

  public boolean isRequired(String isRequired) {
    return isRequired != null && StringUtils.equals("1", isRequired);
  }

  public void setIsInsert(String isInsert) {
    this.isInsert = isInsert;
  }

  public String getIsInsert() {
    return isInsert;
  }

  public boolean isInsert() {
    return isInsert(this.isInsert);
  }

  public boolean isInsert(String isInsert) {
    return isInsert != null && StringUtils.equals("1", isInsert);
  }

  public void setIsEdit(String isEdit) {
    this.isEdit = isEdit;
  }

  public String getIsEdit() {
    return isEdit;
  }

  public boolean isEdit() {
    return isInsert(this.isEdit);
  }

  public boolean isEdit(String isEdit) {
    return isEdit != null && StringUtils.equals("1", isEdit);
  }

  public void setIsList(String isList) {
    this.isList = isList;
  }

  public String getIsList() {
    return isList;
  }

  public boolean isList() {
    return isList(this.isList);
  }

  public boolean isList(String isList) {
    return isList != null && StringUtils.equals("1", isList);
  }

  public void setIsQuery(String isQuery) {
    this.isQuery = isQuery;
  }

  public String getIsQuery() {
    return isQuery;
  }

  public boolean isQuery() {
    return isQuery(this.isQuery);
  }

  public boolean isQuery(String isQuery) {
    return isQuery != null && StringUtils.equals("1", isQuery);
  }

  public void setQueryType(String queryType) {
    this.queryType = queryType;
  }

  public String getQueryType() {
    return queryType;
  }

  public String getHtmlType() {
    return htmlType;
  }

  public void setHtmlType(String htmlType) {
    this.htmlType = htmlType;
  }

  public void setDictType(String dictType) {
    this.dictType = dictType;
  }

  public String getDictType() {
    return dictType;
  }

  public void setSort(Integer sort) {
    this.sort = sort;
  }

  public Integer getSort() {
    return sort;
  }

  public boolean isSuperColumn() {
    return isSuperColumn(this.javaField);
  }

  public static boolean isSuperColumn(String javaField) {
    return StringUtils.equalsAnyIgnoreCase(
        javaField,
        // BaseEntity
        "createBy",
        "createTime",
        "updateBy",
        "updateTime",
        "remark",
        // TreeEntity
        "parentName",
        "parentId",
        "orderNum",
        "ancestors");
  }

  public boolean isUsableColumn() {
    return isUsableColumn(javaField);
  }

  public static boolean isUsableColumn(String javaField) {
    // isSuperColumn()中的名单用于避免生成多余Domain属性，若某些属性在生成页面时需要用到不能忽略，则放在此处白名单
    return StringUtils.equalsAnyIgnoreCase(javaField, "parentId", "orderNum", "remark");
  }

  public String readConverterExp() {
    String remarks = StringUtils.substringBetween(this.columnComment, "（", "）");
    StringBuffer sb = new StringBuffer();
    if (StringUtils.isNotEmpty(remarks)) {
      for (String value : remarks.split(" ")) {
        if (StringUtils.isNotEmpty(value)) {
          Object startStr = value.subSequence(0, 1);
          String endStr = value.substring(1);
          sb.append("").append(startStr).append("=").append(endStr).append(",");
        }
      }
      return sb.deleteCharAt(sb.length() - 1).toString();
    } else {
      return this.columnComment;
    }
  }
}
